
class_name Skill
extends Node




# 技能类
# 技能有两个发动形式 start（主动触发）与 auto（被动触发）
# start 通常由玩家直接调用
# auto 由在特定的时机由程序调用
# 以下列举了目前所拥有的 auto 的触发形式与参数

# == auto 参数一般有以下参数 ==
# "class": 大的种类
# "type": 小的种类
# "state": 状态
# "target": 目标，应该是一个对象
# "target_position": 目标位置

# == 战斗时触发 ==
# 参数：
# "class": "ATTACK" # 表示攻击
# "type": "ordinary" # 表示伤害类型
# "state": "START" # 表示攻击状态，如果是攻击结束时就是 "END"
# "target": <unit> # 被攻击的对象
# "harm": <int> # 伤害值

# == 移动时触发 ==
# 参数:
# "class": "MOVE"
# "start_position": Vector2 # 出发坐标
# "target_position": Vector2 # 目的地
# "start_cell": 触发的图块信息
# "target_cell": 目的地的图块信息，可以利用这个来判别目标区域，实现类似于“走到草地上时hp+1”的技能
# "path": 路径数组
# "index": 当前的下标

# == 回合结束时调用 ==
# "class": "ROUND_END"
# "user": 技能持有者,
# "round_number": 回合数




var master: UnitSkill = null
@export var skill_name: String = ""
@export_multiline var skill_describe: String = ""




func _ready() -> void:
	master = get_parent()




func _enter_tree() -> void:
	master = get_parent()




## 手动开始
func start(_args: Dictionary = {}) -> void:
	pass




## 执行
func _run() -> void:
	pass




## 自动开始
## 由某些时机调用的方法
## 例如在回合结束时，发起攻击时等
func auto(_args: Dictionary = {}) -> void:
	pass



## 代价
## 如果是主动技能的话，会需要一个这个
## 返回一个 bool 用于验证是否满足发动条件
func cost() -> bool:
	return true




## 回调检查
func call_check(_args: Dictionary) -> bool:
	return true




# ======== 工具方法

## 获取持有该技能的 unit
func get_master_unit() -> Unit:
	return master.master




## 获取场景
func get_scene() -> Scene:
	return get_tree().current_scene as Scene
